package packet

import (
	"errors"
	"hy_808/protocol/hygprs"
	"strconv"
)

type P8074 struct {
	hygprs.Fields
	Content []byte //0x12项得值
	PType   byte
}

// 车载机程序版本号
type DeviceVerData struct {
	Line         uint16
	Bus          uint16
	DeviceIden   string //8字节车载机特征字 字符串
	MicroNo      uint32 //4字节RC500芯片号
	DeviceNo     uint32 //4字节车载机序列号
	VerNo        uint16 //2字节版本号
	BankNo       uint32 //4字节银行终端号
	BankMerchant string //16字节银行商户号（ASCII码）
	Tpdu         string //5字节银行TPDU（BCD码）
	Sim          string //20字节SIM卡号（ASCII码）
	Ver          string
}

func Parse8074Packet(data []byte) P8074 {
	p := P8074{Fields: hygprs.MakeFields(hygprs.MakePacket(data))}
	content := p.GetBytes(0x12)
	p.Content = content
	p.PType = content[0]
	return p
}

/*
*
后台请求车载机程序版本号
返回数据：

	数据类型（0xf0）+ 0x00 + 0x00 + 0xa5 + 0x5a(垦利为车号高字节)+2字节线路号+2字节车号+8字节车载机特征字+4字节RC500芯片号+4字节车载机序列号+2字节版本号+4字节银行终端号+16字节银行商户号（ASCII码）+5字节银行TPDU（BCD码）+20字节SIM卡号（ASCII码）
*/
func (p P8074) DeviceVer() (DeviceVerData, error) {
	data := p.Content
	id := p.Content[0]
	if id != 0xf0 {
		//log.Println("解析版本异常", id)
		return DeviceVerData{}, errors.New("解析版本异常")
	}
	//[5:7]2字节线路号
	line := hygprs.ToUint16(data[5:7])
	//[7:9]2字节车号
	bus := hygprs.ToUint16(data[5:7])
	//[9:17] 8字节车载机特征字
	deviceIden := hygprs.B2Str(data[9:17])
	//[17:21]4字节RC500芯片号
	microNo := hygprs.ToUint32Little(data[9:17])
	//[21:25]4字节车载机序列号 小端
	deviceNo := hygprs.ToUint32Little(data[21:25])
	//[25:27]2字节版本号
	verNo := hygprs.ToUint16Little(data[25:27])
	//[27:31]4字节银行终端号
	bankNo := hygprs.ToUint32Little(data[27:31])
	//[31:47]16字节银行商户号（ASCII码）
	bankMerchant := hygprs.B2Str(data[31:47])
	//[47:52]5字节银行TPDU（BCD码）
	tpdu := hygprs.Bcd2Number(data[47:52])
	//[52:72]20字节SIM卡号（ASCII码）
	sim := hygprs.B2Str(data[52:72])

	return DeviceVerData{
		Line:         line,
		Bus:          bus,
		DeviceIden:   deviceIden,
		MicroNo:      microNo,
		DeviceNo:     deviceNo,
		VerNo:        verNo,
		BankNo:       bankNo,
		BankMerchant: bankMerchant,
		Tpdu:         tpdu,
		Sim:          sim,
		Ver:          strconv.Itoa(int(deviceNo)) + "_" + deviceIden + "_" + sim,
	}, nil
}
